package main

import "fmt"

/*
如果一个指针变量存放的又是另一个指针变量的地址，则称这个指针变量为指向指针的指针变量。

当定义一个指向指针的指针变量时，第一个指针存放第二个指针的地址，第二个指针存放变量的地址：
var ptr **int
*/
func main() {
	var a int
	var ptr *int
	var pptr **int //一个指向指针的指针

	a = 3000

	/* 指针 ptr 地址 */
	ptr = &a

	/* 指向指针 ptr 地址 */
	pptr = &ptr

	/* 获取 pptr 的值 */
	fmt.Printf("变量 a = %d\n", a)                                      //3000
	fmt.Printf("指针变量 *ptr = %d\n", *ptr)                              //3000
	fmt.Printf("指向指针的指针变量 **pptr = %d\n", **pptr)                     //3000
	fmt.Println("ptr=", ptr, ", *ptr", *ptr)                          //ptr= 0xc00000a098 , *ptr 3000
	fmt.Println("pptr=", pptr, ", *pptr", *pptr, ", **pptr=", **pptr) //pptr= 0xc000006028 , *pptr 0xc00000a098 , **pptr= 3000

}
